package com.emeraldparser.util;

import com.google.common.collect.ImmutableCollection;

public abstract class ImmutableGraph<V, E> extends AbstractGraph<V, E> {

	@Override
	public final boolean addVertex(V vertex) {
		throw new UnsupportedOperationException();
	}

	@Override
	public abstract ImmutableCollection<E> edgeLabels();

	@Override
	public abstract ImmutableCollection<E> inboundEdgeLabels(V vertex);

	@Override
	public abstract ImmutableCollection<E> outboundEdgeLabels(V vertex);

	@Override
	public final boolean addDirectedEdge(V source, V destination, E edgeLabel) {
		throw new UnsupportedOperationException();
	}

	@Override
	public final boolean addAll(Graph<? extends V, ? extends E> graph) {
		throw new UnsupportedOperationException();
	}

	@Override
	public abstract ImmutableCollection<V> vertices();

	@Override
	public abstract ImmutableCollection<Edge<V, E>> edges();

	@Override
	public abstract ImmutableCollection<Edge<V, E>> edges(V vertex);

	@Override
	public abstract ImmutableCollection<Edge<V, E>> inboundEdges(V vertex);

	@Override
	public abstract ImmutableCollection<Edge<V, E>> outboundEdges(V vertex);

	@Override
	public abstract ImmutableCollection<V> predecessors(V vertex);

	@Override
	public abstract ImmutableCollection<V> successors(V vertex);

	@Override
	public abstract ImmutableCollection<V> predecessors(V vertex, E edgeLabel);

	@Override
	public abstract ImmutableCollection<V> successors(V vertex, E edgeLabel);

}
